package com.sugar.jvm;

import javassist.CannotCompileException;
import javassist.ClassPool;
import javassist.CtClass;

import java.nio.ByteBuffer;
import java.util.*;

/**
 * @author felix
 * @date 2024/12/17 14:46
 */
public class test {
    public static void main(String[] args) throws CannotCompileException, InterruptedException {

//        System.out.println("配置：`-Xmx64m`，触发堆溢出");
//        System.out.println("Java heap space");
//        List<byte[]> list = new ArrayList<>();
//        while (true) {
//            list.add(new byte[1024 * 1024]); // 每次申请1MB
//        }

//        System.out.println("GC 超 98% 时间回收不到 2% 的堆，JVM 保护性抛出异常");
//        Map<String, String> map = new HashMap<>();
//        while (true) {
//            map.put(UUID.randomUUID().toString(), "OOM");
//        }

//        System.out.println("配置：`-XX:MaxMetaspaceSize=64m --add-opens java.base/java.lang=ALL-UNNAMED `");
//        System.out.println(" 动态生成类，导致元空间膨胀");
//        while (true) {
//            ClassPool pool = ClassPool.getDefault();
//            CtClass cc = pool.makeClass(UUID.randomUUID().toString());
//            cc.toClass(); // 动态生成类，导致元空间膨胀
//        }

        System.out.println("配置：`-XX:MaxDirectMemorySize=64m`");
        while (true) {
            ByteBuffer buffer = ByteBuffer.allocateDirect(1024 * 1024);
            Thread.sleep(1);
        }

    }


}
